#============================================
#知识点
# 1、什么是哈希hash
#hash一类算法，该算法接受传入的内容，经过运算得到一串hash值

#hash值的特点:
#I只要传入的内容一样，得到的hash值必然-样
#II不能由hash值返解成内容
#III不管传入的内容有多大，只要使用的hash算法不变，得到的hash值长度是一定

# 2、hash的用途
#特点II用于密码密文传输的验证
#特点I、III用于文件完整性校验
#============================================
#文件完整性校验
# import hashlib
# from typing import ValuesView
# m = hashlib.sha3_512("alex3714".encode('utf8'))   #创建一个hash工厂qwq为初始材料  sha_513为hash处理方法有多种
# # m.update("123".encode('utf8'))    #可以通过update提供多个材料    
# # m.update("321".encode('utf8'))     #一定要给提供的材料加上一个编码格式
# res = m.hexdigest()   #处理后的hash值
# print(res)

#虽然可以一次性可以给予多个材料但是不好，会出现内存不够或者效率太小
#可以通过通过seek随机一部分一部分的取出文件去校验

#============================================
#撞库
# import hashlib
# eryetograph= '2aa891b736e70ca459b3e05c51d881c72c8ab4eaf07bf2e90e139dba65a10e3dd2703dbf291743f9c01cb1fd4b5eb9eba9cd4751ce01569409ad8f0a94d296ba'
# #密码字典
# passwds= ['alex3714','alex1313','alex94139413' ,'alex123456' ,'123456alex','a123lex']   
# dic={}
# for p in passwds: 
#     res = hashlib.sha3_512(p. encode('utf-8'))
#     dic [p]=res.hexdigest()
# #模拟撞库
# for k,v in dic.items() :
#     if v == eryetograph:
#         print('撞库成功，明文密码是: %s' %k)
#         break


#============================================
#密码加盐（提升撞库成本）
#其实就是再给予材料时，在不同的位置放一些其他的材料。
# import hashlib
# m = hashlib.sha3_512("qwq".encode("utf-8"))
# m.update("我是你爹".encode("utf-8"))
# m.update("密码".encode("utf-8"))          #在面密码的前后加一些密文就不容易撞库
# m.update("就凭你还想盗我的密码".encode("utf-8"))
# res = m.hexdigest()
# print(res)

import hashlib
str = '16363730699000'
id = 'old'
x = hashlib.md5(id.encode('utf-8'))
res = x.hexdigest()
print(res)
